package br.com.foxinline.manager.pesquisar.ep;

import br.com.foxinline.enums.TipoPessoa;
import br.com.foxinline.modelo.Anexo;
import br.com.foxinline.modelo.Pessoa;
import br.com.foxinline.modelo.ep.*;
import br.com.foxinline.servico.ep.*;
import br.com.foxinline.utilitario.Caracteres;
import br.com.foxinline.utilitario.Mensagem;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author cadomeireles
 */
@ViewScoped
@ManagedBean
public class ManagerPesquisarEscrituraSDI implements Serializable {
 
    @EJB
    EscrituraSDIServico escrituraServico;
    @EJB
    AtoTipoEPServico atoTipoEPServico;
    @EJB
    QualidadeServico qualidadeServico;     
    
    private Parte parte;
    private EscrituraSDI escritura;    
    private List<EscrituraSDI> escrituras;
        
    private EscrituraSDI escrituraVisualizar;
    private List<Parte> partesVisualizar;    
    private List<SeloEP> selosEPVisualizar;
    private List<Anexo> anexosVisualizar;
    
    private EscrituraSDI escrituraDeletar;
    
    private String visualizarId;

    @PostConstruct
    public void init() {
        instanciar();
        delegar();
    }

    private void instanciar() {
        this.escritura = new EscrituraSDI();
        this.escrituras = new ArrayList<EscrituraSDI>();
        
        this.parte =  new Parte();
        Pessoa pessoa = new Pessoa();
        pessoa.setTipoPessoa(TipoPessoa.FISICA);
        this.parte.setPessoa(pessoa);
    }

    private void delegar() {
        Map<String, String> parametros = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        this.visualizarId = parametros.get("escrituraId");

        if (visualizarId != null) {
            this.escrituraVisualizar = escrituraServico.pesquisar(Long.parseLong(visualizarId));
            this.partesVisualizar = escrituraServico.obterPartes(this.escrituraVisualizar);
            this.selosEPVisualizar = escrituraServico.obterSelos(this.escrituraVisualizar);
            this.anexosVisualizar = escrituraServico.obterAnexos(this.escrituraVisualizar);
        }

    }

    public void pesquisar() {
        this.escrituras = escrituraServico.pesquisar(this.escritura, this.parte);
    }    
    
    public void limpar() {
        instanciar();
    }
    
    public void deletar() {
        escrituraServico.deletar(this.escrituraDeletar);
        pesquisar();
        
        Mensagem.messagemInfo("Escritura excluída com sucesso!");
    }    
    
    public List<AtoTipoEP> autocompletarAtoTipoEP(String query) {
        return atoTipoEPServico.autocompletarAtoTipoCESDI(query);
    }

    public List<Qualidade> autocompletarQualidade(String query) {
        return qualidadeServico.autocompletar(query, this.escritura.getAtoTipoEP());
    }

    public String adicionarMascaraCNPJ(String string) {
        return  Caracteres.adicionarMascara(string, Caracteres.cnpjMask);
    }

    public String adicionarMascaraCPF(String string) {
        return  Caracteres.adicionarMascara(string, Caracteres.cpfMask);
    }

    public List<Anexo> getAnexosVisualizar() {
        return anexosVisualizar;
    }

    public void setAnexosVisualizar(List<Anexo> anexosVisualizar) {
        this.anexosVisualizar = anexosVisualizar;
    }

    public EscrituraSDI getEscritura() {
        return escritura;
    }

    public void setEscritura(EscrituraSDI escritura) {
        this.escritura = escritura;
    }

    public EscrituraSDI getEscrituraDeletar() {
        return escrituraDeletar;
    }

    public void setEscrituraDeletar(EscrituraSDI escrituraDeletar) {
        this.escrituraDeletar = escrituraDeletar;
    }

    public EscrituraSDI getEscrituraVisualizar() {
        return escrituraVisualizar;
    }

    public void setEscrituraVisualizar(EscrituraSDI escrituraVisualizar) {
        this.escrituraVisualizar = escrituraVisualizar;
    }

    public List<EscrituraSDI> getEscrituras() {
        return escrituras;
    }

    public void setEscrituras(List<EscrituraSDI> escrituras) {
        this.escrituras = escrituras;
    }

    public Parte getParte() {
        return parte;
    }

    public void setParte(Parte parte) {
        this.parte = parte;
    }

    public List<Parte> getPartesVisualizar() {
        return partesVisualizar;
    }

    public void setPartesVisualizar(List<Parte> partesVisualizar) {
        this.partesVisualizar = partesVisualizar;
    }

    public List<SeloEP> getSelosEPVisualizar() {
        return selosEPVisualizar;
    }

    public void setSelosEPVisualizar(List<SeloEP> selosEPVisualizar) {
        this.selosEPVisualizar = selosEPVisualizar;
    }

}
